package cn.zxinrun.wps.annotation;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 复杂表头配置注解
 * 用于支持多行表头、合并单元格等复杂表头结构
 * @author Mr.Zhang
 * @since 1.0
 **/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelHeader {

    /**
     * 表头行配置，支持多行表头
     * 每行用分号分隔，如："主表头;子表头1,子表头2"
     * @return 表头行配置
     */
    String[] rows() default {};

    /**
     * 列合并配置
     * 格式：起始列索引:结束列索引，如："0:2"表示合并第0列到第2列
     * 多个合并用逗号分隔，如："0:2,4:6"
     * @return 列合并配置
     */
    String columnMerge() default "";

    /**
     * 行合并配置
     * 格式：起始行索引:结束行索引，如："0:1"表示合并第0行到第1行
     * 多个合并用逗号分隔，如："0:1,3:4"
     * @return 行合并配置
     */
    String rowMerge() default "";

    /**
     * 表头背景颜色
     * @return 背景颜色
     */
    IndexedColors backgroundColor() default IndexedColors.GREY_50_PERCENT;

    /**
     * 表头字体颜色
     * @return 字体颜色
     */
    IndexedColors fontColor() default IndexedColors.WHITE;

    /**
     * 表头对齐方式
     * @return 对齐方式
     */
    HorizontalAlignment align() default HorizontalAlignment.CENTER;

    /**
     * 表头字体大小
     * @return 字体大小
     */
    short fontSize() default 10;

    /**
     * 表头是否加粗
     * @return 是否加粗
     */
    boolean bold() default true;

    /**
     * 表头行高
     * @return 行高
     */
    float rowHeight() default 20.0f;

    /**
     * 表头列宽
     * @return 列宽
     */
    int columnWidth() default 16;

    /**
     * 是否自动调整列宽
     * @return 是否自动调整
     */
    boolean autoSizeColumn() default false;

    /**
     * 表头边框样式
     * @return 边框样式
     */
    BorderStyle borderStyle() default BorderStyle.THIN;

    /**
     * 表头边框颜色
     * @return 边框颜色
     */
    IndexedColors borderColor() default IndexedColors.BLACK;

    /**
     * 边框样式枚举
     */
    enum BorderStyle {
        NONE,
        THIN,
        MEDIUM,
        DASHED,
        HAIR,
        THICK,
        DOUBLE,
        DOTTED,
        MEDIUM_DASHED,
        DASH_DOT,
        MEDIUM_DASH_DOT,
        DASH_DOT_DOT,
        MEDIUM_DASH_DOT_DOT,
        SLANTED_DASH_DOT
    }
} 